const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
// 汽车从左上角到右下角, 计算最小初始加油量,
// 这道题, 初始化时, 需要考虑, 因为如果这个点不是加油站, 并且是障碍, 那么就直接返回,
// 在过程中, 我们需要使用小顶堆, 咱暂时使用sort代替,
// 在过程中维持当前的状态对象{current: 初始为101, flag: 是否加油, 默认没加油, min: 记录最小初始加油 }
// 如果遇到加油站, 需要更新min, 后续如果current 大于了油箱, 就放弃路线, 如果遇到障碍, 也放弃, 如果是终点, 那么就结束;
//  把能到达终点的路线, 加入ans中, 如果pq为空, 则结束, 如果ans长度为0, 则没有路线能到达终点
class Node {
    constructor(x, y, current = 0, flag = false, min = 101) {
        this.x = x
        this.y = y
        this.current = current
        this.flag = flag
        this.min = min
    }
}

let m, n; // m行, n列
let initArr = [];
rl.on("line", (line) => {
    if (m === undefined) {
        [m, n] = line.trim().split(/\s*,\s*/).map(Number)
    } else {
        initArr.push(line.trim().split(/\s*,\s*/).map(Number))
        if (initArr.length === m) {
            console.log(getResult(m, n, initArr))

            // clear
            m = n = undefined
            initArr.length = 0
            //rl.close()
        }
    }

})

function getResult(m, n, initArr) {
    let visited = new Array(m).fill(null).map(_ => new Array(n).fill(false))
    if (initArr[0][0] === 0) {
        return -1
    }
    if (initArr[0][0] >= 100) {
        return -1
    }

    let direction = [
        [-1, 0],
        [1, 0],
        [0, -1],
        [0, 1]
    ]
    let ans = 101
    dfs(0, 0, initArr[0][0], 101, false)
    function dfs(x, y, current, min, flag) {
        //到终点啦
        if (x === m - 1 && y === n - 1) {
            // 没加过油, 就到达终点, min取current
            if (flag === false) {
                ans = Math.min(ans, current)
            } else {
                ans = Math.min(ans, min)
            }
            return
        }
        if(flag === false && current >= ans) { // 没加油, 但是已经超过目标答案
            return
        }
        if(flag === true && min >= ans) { // 已加油, 但是已经超过目标答案
            return
        }

        for (const [addX, addY] of direction) {
            let newX = x + addX
            let newY = y + addY
            if (newX >= 0 && newY >= 0 && newX < m && newY < n && initArr[newX][newY] !== 0 && !visited[newX][newY]) {
                let value = initArr[newX][newY]
                visited[newX][newY] = true

                // 加油站
                if (value === -1) {
                    if (!flag) { // 第一次加油
                        dfs(newX, newY, 0, current, true, ans)
                    } else { // 之前加过油
                        dfs(newX, newY, 0, min, true, ans)
                    }
                } else { // 正常路线, 消耗油料
                    if (current + value >= 100) {
                        // 油不够,放弃路线
                    } else {
                        dfs(newX, newY, current + value, min, flag, ans)
                    }
                }
                visited[newX][newY] = false
            }
        }
    }

    if (ans === 101) {
        return -1
    } else {
        return ans
    }
}